package com.jinxi.sign.mode.single;

//没有用到synchronized
//性能最优的一种方法
public class LazyProtectedClass {

    //方法私有，但是逃不过 反射机制

    private LazyProtectedClass() {
        if (LazyHolder.LAZY == null) {
            throw new RuntimeException("不允许构建多个实例");    //干死反射
        }
    }

    //懒汉单例模式
    //LazyHolder 里面的逻辑需要等到外部方法调用时才执行
    //巧妙利用了内部类的特性
    //JVM底层执行逻辑完美地避免了线程安全问题
    public static final LazyProtectedClass getInstance() {
        return LazyHolder.LAZY;
    }

    private static class LazyHolder {
        private static final LazyProtectedClass LAZY = new LazyProtectedClass();
    }
}
